import md5 from "js-md5"
import sha256, { Hash } from 'js-sha256'
import CONFIG from '@/config';

/**
 * 鉴权加密
 * @param {*} params
 * @returns
 */
 export function getEncodeHeader(
    params: string
) {
    const appKey = CONFIG.ACCESS_KEY_ID
    const appSecret = CONFIG.ACCESS_KEY_SECRET
    const timestamp = parseInt(Date.now() / 1000 + "")
    const nonce = parseInt(Math.random() * 100000 + "") + timestamp
    const header: any = {
        "x-bili-accesskeyid": appKey,
        // 请求体的编码值，根据请求体计算所得。算法说明：将请求体内容当作字符串进行MD5编码。
        "x-bili-content-md5": getMd5Content(params),
        // 签名方式。取值：HMAC-SHA256
        "x-bili-signature-method": "HMAC-SHA256",
        // 签名唯一随机数。用于防止网络重放攻击，建议您每一次请求都使用不同的随机数。
        "x-bili-signature-nonce": nonce + "",
        "x-bili-signature-version": "1.0",
        // unix时间戳，单位是秒。请求时间戳不能超过当前时间10分钟，否则请求会被丢弃。
        "x-bili-timestamp": timestamp
    }
    const data: string[] = []
    for (const key in header) {
        data.push(`${key}:${header[key]}`)
    }

    // const signature = crypto
    //     .createHmac("sha256", appSecret)
    //     .update(data.join("\n"))
    //     .digest("hex")
    // const signature = sha256
    //     .hmac
    //     .create(appSecret)
    //     .update(data.join("\n"))
    //     .hex()
    const signature = (sha256 as unknown as Hash).hmac(appSecret, data.join("\n"))


    return {
        // 接受的返回结果的类型。目前只支持JSON类型，取值：application/json。
        "Accept": "application/json",
        "Content-Type": "application/json",
        ...header,
        Authorization: signature
    }
}

/**
 * MD5加密
 * @param {*} str
 * @returns
 */
export function getMd5Content(str: string) {
    // return md5
    //     .create()
    //     .update(str)
    //     .hex()
    return md5.hex(str);
}
